home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / effects.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-10  |  2.6 KB  |  104 lines

  1. #include "graphpp.h"
  2. #include <dos.h>
  3. #include "pixel.h"
  4. #include "effects.h"
  5. #include "tools.h"
  6.  
  7. ///////////////////////
  8. void replace_color(rect work, int weight, int pat)
  9.     {
  10.     if(global_i[7] != global_i[6])
  11.     if(global_i[8] == 0)
  12.         {
  13.         for(int i = work.origin.X; i <= work.corner.X; i++)
  14.         for(int j = work.origin.Y; j <= work.corner.Y; j++)
  15.             if(getpixel(i, j) == global_i[6])
  16.             put_pixel(i, j, weight);
  17.         }
  18.     else
  19.         for(int i = work.origin.X; i <= work.corner.X; i++)
  20.         for(int j = work.origin.Y; j <= work.corner.Y; j++)
  21.             if(getpixel(i, j) == global_i[6])
  22.             put_pixel_error_prop(i, j, weight, pat);
  23.     }
  24. ///////////////////////
  25. void color_bar(rect work, int weight, int pat)
  26.     {
  27.     int x, y;
  28.     if(global_i[8] == 0)    // no error propagation
  29.     {
  30.     for(x = work.origin.X; x < work.corner.X; x++)
  31.         for(y = work.origin.Y; y < work.corner.Y; y++)
  32.         {
  33.         put_pixel(x, y, weight);
  34.         }
  35.     }
  36.     else
  37.     for(x = work.origin.X; x < work.corner.X; x++)
  38.         for(y = work.origin.Y; y < work.corner.Y; y++)
  39.         {
  40.         put_pixel_error_prop(x, y, weight, pat);
  41.         }
  42.  
  43.     }
  44. ///////////////////////
  45. void process_color(rect work,
  46.     int weight = global_i[9], int pat = 16)
  47.     {
  48.     if(global_i[12] == TOOL_ERASER         // DATA_TOOLS
  49.        || global_i[12] == TOOL_SCISSORS)
  50.     color_bar(work, weight, pat);
  51.     else
  52.     replace_color(work, weight, pat);
  53.     }
  54. //////////////////////
  55. void color_grad(rect work, int direction)
  56.     {
  57.     int w = work.width();
  58.     int h = work.height();
  59.     int slices, step_x, step_y;
  60.     if(global_i[8] == 0)
  61.     slices = 16;
  62.     else
  63.     if(direction == 1)    // HORIZ_GRAD
  64.         slices = w;
  65.     else if(direction == 2)
  66.         slices = h;
  67.     if(direction == 1)    // HORIZ_GRAD
  68.     {
  69.     step_x = w / slices;
  70.     if(step_x == 0)
  71.         return;
  72.     }
  73.     else if(direction == 2)
  74.     {
  75.     step_y = h / slices;
  76.     if(step_y == 0)
  77.         return;
  78.     }
  79.     int i;
  80.     switch(direction)
  81.     {
  82.     case 1:                                   // HORIZONTAL GRADIENT
  83.         for(i = 0; i < slices; i++)
  84.         {
  85.         process_color(rect(work.origin.X + i * step_x, work.origin.Y,
  86.             work.origin.X + (i + 1) * step_x, work.corner.Y),
  87.             i, slices);
  88.         }
  89.         break;
  90.     case 2:                                     // VERTICAL GRADIENT
  91.         for(i = 0; i < slices; i++)
  92.         {
  93.         process_color(rect(work.origin.X, work.origin.Y  + i * step_y,
  94.             work.corner.X + 1, work.origin.Y + (i + 1) * step_y),
  95.             i, slices);
  96.         }
  97.         break;
  98.     default:        // no gradient
  99.         process_color(work, global_i[9], 48);
  100.         break;
  101.     }
  102.     }
  103. /////////////////////////////
  104.